package com.dtx.flyweight;

/**
 * BigString类表示由BigChar组成的"大型字符串"的类。
 * bigChars字段是BigChar类型的数组,它里面保存着BigChar类的实例。在构造函数的for语句中,
 * 我们并没有像下面这样使用new关键字来生成BigChar类的实例.
 *
 *      for (int i = 0; i < bigChars.length; i++) {
 *             bigChars[i] = new BigChar(string.charAt(i));  ←不共享实例
 *         }
 * 而是调用了getBigChar方法,具体如下。
 *
 *      BigCharFactory factory = BigCharFactory.getInstance();
 *         for (int i = 0; i < bigChars.length; i++) {
 *             bigChars[i] = factory.getBigChar(string.charAt(i)); ←共享实例
 *         }
 *
 * 由于调用了BigCharFactory方法,所以对于相同的字符来说,可以实现BigChar类的实例共享。
 */
public class BigString {

    // "大型字符"的数组
    private BigChar[] bigChars;

    /**
     * 构造函数
     * @param string
     */
    public BigString(String string) {
        bigChars = new BigChar[string.length()];
        BigCharFactory factory = BigCharFactory.getInstance();
        for (int i = 0; i < bigChars.length; i++) {
            bigChars[i] = factory.getBigChar(string.charAt(i));
        }
    }

    /**
     * 显示
     */
    public void print(){
        for (int i = 0; i < bigChars.length; i++) {
            bigChars[i].print();
        }
    }


}
